package io;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class CopyDemo2 {
    public static void main(String[] args) throws IOException {
        /*
        * 文件内容(6字节)：
        * 00110011 11001100 10101010 01010101 11110000 00001111
        * byte[] data = new byte[4] //4个字节的数据
        * data:{00000000,00000000,00000000,00000000} 2进制表示
        * 第一次调用：int d = fis.read(data);
        * 一次性从文件中读取4(data数组的长度为4)个字节
        * 00110011 11001100 10101010 01010101 11110000 00001111
        * ^^^^^^^^ ^^^^^^^^ ^^^^^^^^ ^^^^^^^^
        * |------读取到的数据------------------|
        * data:{00110011,11001100,10101010,01010101}
        * 数组里的4个字节为本次读取到的全部数据
        * d:4 返回值d为整数4，表示本次实际读取到了4个字节
        * 第二次调用：int d = fis.read(data);
         * 一次性从文件中读取4(data数组的长度为4)个字节
         * 00110011 11001100 10101010 01010101 11110000 00001111 文件末尾了
         *                                     ^^^^^^^^ ^^^^^^^^ ^^^^^^^^ ^^^^^^^^
         *                                     |---读取到的数据--|
         * data:{11110000,00001111,10101010,01010101}
         *      |--本次读取到的字节-| |----旧数据-------|
         * 数组里的4个字节为本次读取到的全部数据
         * d:2 返回值d为整数2，表示本次实际读取到了2个字节
         * 第三次调用：int d = fis.read(data);
         * 一次性从文件中读取4(data数组的长度为4)个字节
         * 00110011 11001100 10101010 01010101 11110000 00001111 文件末尾了
         *                                                       ^^^^^^^^ ^^^^^^^^ ^^^^^^^^ ^^^^^^^^
         *                                                       |---读取到的数据--|
         * data:{11110000,00001111,10101010,01010101}
         *      |---------------------旧数据---------|
         * 数组里的4个字节为本次读取到的全部数据
         * d:-1 返回值d为整数-1，表示已经是末尾了，本次没有读取任何数据
        * */


        FileInputStream fis = new FileInputStream("image.jpg");
        FileOutputStream fos = new FileOutputStream("image_copy2.jpg");
        int d;
        byte[] data = new byte[1024*10];
        long start = System.currentTimeMillis();
        while ((d = fis.read(data))!=-1){
            fos.write(data,0,d);
        }
        long end = System.currentTimeMillis();
        System.out.println("耗时"+(end-start)+"ms");
        System.out.println("复制完成");
        fis.close();
        fos.close();
    }
}
